home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 140 / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan).7z / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan) (Track 1).bin / tools / xpicw / xpicw110.lzh / WLSource / hol.s < prev    next >
Encoding:
Text File  |  1997-04-10  |  4.1 KB  |  236 lines

  1. *    hol.s    Horizontal OverLap
  2. *        水平方向のオーバーラップ / 最高速 = 3
  3. *            by Mitsuky
  4.  
  5.  
  6. SPEED_MAX    equ    3
  7.  
  8.     .offset    8        * 引き数
  9. _source_ptr:    .ds.l    1
  10. _dest_ptr:    .ds.l    1
  11. _speed:        .ds.l    1
  12. _vdisp:        .ds.l    1
  13.  
  14.  
  15.  
  16.     .text
  17.     .even
  18.  
  19.     .dc.b    'WL10',$0d,$0a
  20.     .dc.b    '水平方向のオーバーラップ / 最高速 = 3',$0d,$0a
  21.     .dc.b    '    by Mitsuky',$0d,$0a
  22.     .dc.b    $1a
  23.     .even
  24.  
  25. hol:
  26.     link    a6,#0
  27.     movem.l    d1-d7/a0-a4,-(sp)
  28.  
  29.     move.l    _speed(a6),d0    * d0.w =
  30.     bmi    main_ask_speed
  31.     cmpi.l    #SPEED_MAX,d0
  32.     bhi    main_err
  33.  
  34.     tst.l    _vdisp(a6)
  35.     bmi    main_ask_vdisp
  36.  
  37.  
  38.     movea.l    _source_ptr(a6),a1    * a1.l = 転送元アドレス・その1
  39.     movea.l    _dest_ptr(a6),a2    * a2.l = 転送先アドレス・その1
  40.  
  41.     lea.l    jump_table(pc),a0
  42.     add.w    d0,d0
  43.     move.w    (a0,d0.w),d0
  44.     jmp    (a0,d0.w)
  45.  
  46. main_rts:
  47.     moveq.l    #0,d0
  48. main_rts_2:
  49.     movem.l    (sp)+,d1-d7/a0-a4
  50.     unlk    a6
  51.     rts
  52.  
  53.  
  54. ****    ****
  55. main_err:
  56.     moveq.l    #-1,d0
  57.     bra    main_rts_2
  58.  
  59.  
  60. ****    ****
  61. main_ask_speed:
  62.     moveq.l    #SPEED_MAX,d0
  63.     bra    main_rts_2
  64.  
  65.  
  66. ****    ****
  67. main_ask_vdisp:
  68.     move.l    _speed(a6),d0
  69.     lea.l    ask_vdisp_table(pc),a0
  70.     add.w    d0,d0
  71.     move.w    (a0,d0.w),d0
  72.     bra    main_rts_2
  73.  
  74. ask_vdisp_table:
  75.     .dc.w    512,512/2,512/4,512/8
  76.  
  77.  
  78. ****    ****
  79. vdisp:
  80.     movem.l    a0,-(sp)
  81.     move.l    _vdisp(a6),a0
  82.     jsr    (a0)
  83.     movem.l    (sp)+,a0
  84.     rts
  85.  
  86.  
  87. ****    ****
  88. jump_table:
  89.     .dc.w    s0-jump_table
  90.     .dc.w    s1-jump_table
  91.     .dc.w    s2-jump_table
  92.     .dc.w    s3-jump_table
  93.  
  94.  
  95. *********************************************************
  96. s0:            * 速度0の時
  97.     lea.l    512*2(a1),a3        * a3.l = 転送元アドレス・その2
  98.     lea.l    512*2(a2),a4        * a4.l = 転送先アドレス・その2
  99.     lea.l    (512-1)*2(a1),a1    * a1.l = 転送元アドレス・その1
  100.     lea.l    (512-1)*2(a2),a2    * a2.l = 転送先アドレス・その1
  101.     move.l    #1024*512+1*2,d4
  102.     move.l    #1024*512-1*2,d5
  103.  
  104.     move.w    #512-1,d7
  105. s0_loop_x:
  106.     bsr    vdisp
  107.  
  108.     move.w    #512/2-1,d6
  109. s0_loop_y:
  110.     move.w    (a1),(a2)
  111.     move.w    (a3),(a4)
  112.     lea.l    2048(a1),a1
  113.     lea.l    2048(a2),a2
  114.     lea.l    2048(a3),a3
  115.     lea.l    2048(a4),a4
  116.     dbra    d6,s0_loop_y
  117.  
  118.     suba.l    d4,a1
  119.     suba.l    d4,a2
  120.     suba.l    d5,a3
  121.     suba.l    d5,a4
  122.     dbra    d7,s0_loop_x
  123.  
  124.     bra    main_rts
  125.  
  126. ****    ****
  127. s1:            * 速度1の時
  128.     lea.l    512*2(a1),a3        * a3.l = 転送元アドレス・その2
  129.     lea.l    512*2(a2),a4        * a4.l = 転送先アドレス・その2
  130.     lea.l    (512-2)*2(a1),a1    * a1.l = 転送元アドレス・その1
  131.     lea.l    (512-2)*2(a2),a2    * a2.l = 転送先アドレス・その1
  132.     move.l    #1024*512+2*2,d4
  133.     move.l    #1024*512-2*2,d5
  134.  
  135.     move.w    #512-2,d7
  136. s1_loop_x:
  137.     bsr    vdisp
  138.  
  139.     move.w    #512/2-1,d6
  140. s1_loop_y:
  141.     move.l    (a1),(a2)
  142.     move.l    (a3),(a4)
  143.     lea.l    2048(a1),a1
  144.     lea.l    2048(a2),a2
  145.     lea.l    2048(a3),a3
  146.     lea.l    2048(a4),a4
  147.     dbra    d6,s1_loop_y
  148.  
  149.     suba.l    d4,a1
  150.     suba.l    d4,a2
  151.     suba.l    d5,a3
  152.     suba.l    d5,a4
  153.  
  154.     subq.w    #2,d7
  155.     bpl    s1_loop_x
  156.  
  157.     bra    main_rts
  158.  
  159.  
  160. ****    ****
  161. s2:            * 速度2の時
  162.     lea.l    512*2+8(a1),a3        * a3.l = 転送元アドレス・その2
  163.     lea.l    512*2+8(a2),a4        * a4.l = 転送先アドレス・その2
  164.     lea.l    (512-4)*2(a1),a1    * a1.l = 転送元アドレス・その1
  165.     lea.l    (512-4)*2(a2),a2    * a2.l = 転送先アドレス・その1
  166.     move.l    #1024*512+4*2,d4
  167.     move.l    #1024*512-4*2,d5
  168.  
  169.     move.w    #512-4,d7
  170. s2_loop_x:
  171.     bsr    vdisp
  172.  
  173.     move.w    #512/2-1,d6
  174. s2_loop_y:
  175.     move.l    (a1)+,(a2)+
  176.     move.l    (a1)+,(a2)+
  177.     lea.l    2048-8(a1),a1
  178.     lea.l    2048-8(a2),a2
  179.     move.l    -(a3),-(a4)
  180.     move.l    -(a3),-(a4)
  181.     lea.l    2048+8(a3),a3
  182.     lea.l    2048+8(a4),a4
  183.     dbra    d6,s2_loop_y
  184.  
  185.     suba.l    d4,a1
  186.     suba.l    d4,a2
  187.     suba.l    d5,a3
  188.     suba.l    d5,a4
  189.  
  190.     subq.w    #4,d7
  191.     bpl    s2_loop_x
  192.  
  193.     bra    main_rts
  194.  
  195.  
  196. ****    ****
  197. s3:            * 速度3の時
  198.     lea.l    512*2+16(a1),a3        * a3.l = 転送元アドレス・その2
  199.     lea.l    512*2+16(a2),a4        * a4.l = 転送先アドレス・その2
  200.     lea.l    (512-8)*2(a1),a1    * a1.l = 転送元アドレス・その1
  201.     lea.l    (512-8)*2(a2),a2    * a2.l = 転送先アドレス・その1
  202.     move.l    #1024*512+8*2,d4
  203.     move.l    #1024*512-8*2,d5
  204.  
  205.     move.w    #512,d7
  206. s3_loop_x:
  207.     bsr    vdisp
  208.  
  209.     move.w    #512/2-1,d6
  210. s3_loop_y:
  211.     move.l    (a1)+,(a2)+
  212.     move.l    (a1)+,(a2)+
  213.     move.l    (a1)+,(a2)+
  214.     move.l    (a1)+,(a2)+
  215.     lea.l    2048-16(a1),a1
  216.     lea.l    2048-16(a2),a2
  217.     move.l    -(a3),-(a4)
  218.     move.l    -(a3),-(a4)
  219.     move.l    -(a3),-(a4)
  220.     move.l    -(a3),-(a4)
  221.     lea.l    2048+16(a3),a3
  222.     lea.l    2048+16(a4),a4
  223.     dbra    d6,s3_loop_y
  224.  
  225.     suba.l    d4,a1
  226.     suba.l    d4,a2
  227.     suba.l    d5,a3
  228.     suba.l    d5,a4
  229.  
  230.     subq.w    #8,d7
  231.     bne    s3_loop_x
  232.  
  233.     bra    main_rts
  234.  
  235.  
  236.